const questionList = [
	{
		question: '请解释React中props和state的区别？',
		answer: `
  - 1.props
    - 函数组件的props就是一个函数的入参组件
    - 类组件：this.props 包括被该组件调用或者定义的props
 - 2.state
   - 组件中的state包含了随时可以发生变化的数据
   - state由用户定义，它是一个普通javascript对象
 - 3.区别
   -  props是传递组件的(类似函数的形参)，而state是在组件内被组件自己管理的(类似在一个函数内声明变量)。
   -  props是不可修改的
   - state是在组件中创建的，一般在constructor中初始化state
   - state是多变的、可修改的
        
  setState在类组件中使用时，一般情况下是异步执行，在addEventListener、setTimeout和promise的then等函数中执行时是同步执行的
        `,
	},
	{
		question: 'Loader和Plugin的区别是什么？',
		answer: `
- 1.作用不同：
    - Loader直译为"加载器"。Webpack将一切文件视为模块，但是webpack原生是只能解析js文件，如果想将其他文件也打包的话，就会用到loader。 所以Loader的作用是让webpack拥有了加载和解析非JavaScript文件的能力。
   - Plugin直译为"插件"。Plugin可以扩展webpack的功能，让webpack具有更多的灵活性。 在 Webpack 运行的生命周期中会广播出许多事件，Plugin 可以监听这些事件，在合适的时机通过 Webpack 提供的 API 改变输出结果。
- 2.用法不同：
    - Loader在module.rules中配置，也就是说作为模块的解析规则而存在。 类型为数组，每一项都是一个Object，里面描述了对于什么类型的文件（test），使用什么加载(loader)和使用的参数（options）
    - Plugin在plugins中单独配置。 类型为数组，每一项是一个plugin的实例，参数都通过构造函数传入。       
        `,
	},
	{
		question: '浏览器的本地存储(1)的cookie了解多少？',
		answer: `
- Cookie最开始被设计出来其实并不是做本地存储的，而是为了弥补http在状态管理上的不足
- http协议是一个无状态协议，客户端向服务器发请求，服务器返回响应，这次事件就完成了，但是下次发请求如何让服务端直到客户端是谁呢？在这个需求下就产生了Cookie
- Cookie本质上就是浏览器里面存储的一个很小的文本文件，内部以键值对的方式来存储(在chrome开发者面版的Application这一栏可以看到)都会携带相同的Cookie，服务器拿Cookie进行解析，便能拿到客户端的状态 Cookie的作用就是用来做状态存储的，但是也有很多缺陷：

> 1.容量缺陷。Cookie的体积上限只有4KB，只能用来存储少量的信息 \\
2.性能缺陷。Cookie紧跟域名，不管域名下面的某一个地址需不需要这个Cookie，请求都会携带上完整的Cookie，这样随着请求数的增多，其实会造成巨大的性能浪费的，因为请求携带了很多不必要的内容 \\
3.安全缺陷。由于Cookie以纯文本的形式在浏览器和服务器中传递，很容易被非法用户截取，然后进行一系列的篡改，在Cookie的有限期内重新发送给服务器，这是很危险的。另外，在HttpOnly为false的情况下，Cookie信息能直接通过js脚本来读取。
        `,
	},
	{
		question: '浏览器的本地存储(2)的WebStorage了解多少？',
		answer: `
WebStorage又可以分为localStorege和sessionStorage

localStorage和Cookie异同： \\
相同的一点是：针对一个域名，即在同一个域名下，会存储相同的一段localStorage \\
区别： 
- 1.容量：localStorage的容量上限为5M，相对于Cookie的4K大大增加。当然这个5M是针对一个域名的，因此对于一个域名是持久存储的
- 2.只存在客户端，默认不参与和服务端的通信。这样很好地避免了Cookie带来地性能问题和安全问题
- 3.接口封装。通过localStorage暴露在全局，并通过它的setItem和getItem等方法进行操作，非常方便。
看看如何具体操作localStorage？

\`\`\`
let obj={name:"zhufeng",age:10}; 
localStorage.setItem("name","zhufeng");
localstorage.setItem("message",JSON.stringify(obj)); 
//接着进入相同的域名时就能拿到相应的值：
let name=localStorage.getItem("name");
let info=JSON.parse(localStorage.getItem("info"))
\`\`\`

在这里能得到，localStorage其实存储的都是字符串，如果是存储对象需要调用JSON的stringify方法，并且用JSON.parse来解析成对象 应用场景：利用localStorage的较大容量和持久特性，可以利用localStorage存储一些内容稳定的资源，比如官网的logo，存储Base64格式的图片资源，因此要好好利用localStorage

sessionStorage \\
特点：sessionStorage和localStorage是一致的
- 1.容量。容量上限为5M
- 2.只存在客户端，默认不参与和服务端的通信
- 3.接口封装。除了sessionStorage名字有所变化，存储方式、操作方式均和localStorage一样

> 但是sessionStorage和localStorage有一个本质的区别：前者只是会话级别的存储，并不是持久化存储。会话结束后也就是页面关闭，这部分sessionStorage就不存在了

应用场景：1.可以用它对表单信息进行维护，将表单信息存储存储在里面，可以保证页面即使刷新也不会让之前的表单信息丢失。2.可以用它存储本次浏览记录。如果关闭页面后不需要这些记录，用sessionStorage就再合适不过了。事实上微博采取这样的存储方式。
        `,
	},
	{
		question: 'for in 和 for of的区别',
		answer: `
- for in 可以遍历对象和迭代对象(数组 Map Set。。。)，数组的索引将被认为是属性，类型为字符串， 
- for of 遍历可迭代的对象(数组 Map Set。。。)       
`,
	},
]

export default questionList
